home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
comm2
/
mmrsnd11.lha
/
MM
/
Rexx
/
MM_ResendMsg.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1996-04-28
|
8KB
|
417 lines
/*
$VER: MM_ResendMsg 0.11 (28.04.96)
(C) 1996 Robert Hofmann
*/
parse arg args
options cache
options failat 99
options results
signal on break_c
signal on break_d
signal on break_e
signal on break_f
signal on halt
signal on ioerr
signal on syntax
address 'MAILMANAGER'
Main:
call Init
call Header
call Parse_Args(strip(args))
Show
if ~Search_Msgs() then call Quit(6, 'No msgs selected!!!')
call Resend_Msgs
call Quit(0, 'All done.')
exit
break_c:; break_d:; break_e:; break_f:; halt:
signal off break_c
signal off break_d
signal off break_e
signal off break_f
signal off halt
return_code = 5
error_line = 0
error_msg = 'Execution halted!!!'
rc = 0
signal Exit
Exit:
select
when return_code>=40 then error = 'INTERNAL-ERROR:'
when return_code>=30 then error = 'IO-ERROR:'
when return_code>=20 then error = 'ERROR:'
when return_code>=10 then error = 'WARNING:'
when return_code>=5 then error = 'INFO:'
otherwise error = ''
end
if return_code>5 & ~system.arg.noreq then
call Request_Choice('\c\n'error'\n\n ' error_msg ' \n', '* _OK ', '_')
call Log()
call Log('***' strip(error error_msg) '***', '+')
call Log(,'\')
call setclip('MM_LogPre', system.mm.logpre)
exit return_code
Get_Arg: procedure Expose args system.
arg keyword, mode, old
p = find(upper(args), keyword)
select
when mode=0 then
if p>0 then
do
ret = 1
args = delword(args, p, 1)
end
else ret = old
when mode=1 then
if p>0 then
do
left = subword(args, 1, p-1)
rest = subword(args, p+1)
if left(rest, 1)='"' then parse var rest . '"' ret '"' rest
else parse var rest ret rest
args = strip(left strip(rest))
end
else ret = old
when mode=2 then
do
if left(args, 1)='"' then parse var args . '"' ret '"' args
else parse var args ret args
if strip(ret)='' then ret = old
end
otherwise exit 99
end
args = strip(args)
ret = strip(ret, 'b', '" ')
return ret
Get_Version: procedure
parse arg mode
parse value sourceline(3-mode) with . . ver .
parse var ver tst 'ß' .
if ~datatype(strip(tst, 'b', '/ce '), 'N') then
if ~mode then ver = Get_Version(1)
else exit 99
return ver
Header:
call Log(,'/')
call Log('***' system.prg.id '***', '+')
call Log(' 'system.prg.cr)
call Log()
return
Init:
system. = 0
MM_GetTaskPri 'system.taskpri'
call pragma('p', system.taskpri)
system.prg.ver = Get_Version(0)
system.prg.name = 'MM_ResendMsg'
system.prg.id = system.prg.name 'v'system.prg.ver
system.prg.cr = '(C) 1996 Robert Hofmann'
system.tmpfile = 'T:'system.prg.name'.tmp'
system.mm.logpre = getclip('MM_LogPre')
system.prg.logpre = system.mm.logpre'|'
call setclip('MM_LogPre', system.prg.logpre)
system.cmdopts = 'AREA/A,MSG/N,MARKED/S,NOREQ/S'
MM_Version 'system.mm'
call Include_Lib('rexxsupport')
return
Include_Lib: procedure
parse arg lib, prio
if right(upper(lib), 8)~='.LIBRARY' then lib=lib'.library'
if prio='' then prio=0
if ~show('l', lib) then
if ~addlib(lib, prio, -30, 0) then
do
say '*** ERROR: Could not open' lib'!!! ***'
exit 10
end
return
IOerr:
signal off ioerr
return_code = 20
error_line = sigl
error_msg = 'IO-error' rc 'at line' sigl '['errortext(rc)']')
rc = 0
signal Exit
Log: procedure Expose system.
parse arg text, pre
tmp = word('PRG MM', (pre~='')+1)
text = system.tmp.logpre || pre' 'text
MM_WriteLog 'text' '2'
return
Parse_Args: procedure Expose system.
parse arg args
tpl = system.cmdopts',?/S,'
args = translate(args, ' ', '9'x'=')
pk = pos('/K', tpl)
ps = pos('/S', tpl)
select
when pk=0 & ps=0 then p = 0
when pk=0 & ps>0 then p = ps
when ps=0 & pk>0 then p = pk
otherwise p = min(pk, ps)
end
p = lastpos(',', left(tpl, p))
tpl = substr(tpl, p+1) || left(tpl, max(p-1, 0))
do while tpl~=''
parse var tpl template ',' tpl
parse var template keyword '/' .
bool = pos('/S', template)>0
key = pos('/K', template)>0
must = pos('/A', template)>0
num = pos('/N', template)>0
select
when must then system.arg.keyword = '0'x
when bool then system.arg.keyword = 0
when num then system.arg.keyword = 0
otherwise system.arg.keyword = ''
end
if bool | key then mode = ~bool
else mode = 2
system.arg.keyword = Get_Arg(keyword, mode, system.arg.keyword)
if keyword='?' & system.arg.keyword=1 then leave
if must & system.arg.keyword='0'x then
do
tmp = template 'missing!!!'
say
say ' ***' tmp '***'
signal Usage
end
if num & ~datatype(system.arg.keyword, 'N') then
if ~must & system.arg.keyword='' then system.arg.keyword = 0
else
do
tmp = 'Numeric value expected for' template', but is "'system.arg.keyword'"!!!'
say
say ' ***' tmp '***'
signal Usage
end
end
tmp = '?'; if system.arg.tmp then signal Usage
if args~='' then call Quit(10, 'Unknown option(s):' args)
MM_GetAreaInfo system.arg.area 'tmp'
if RC~=0 then call Quit(11, 'Area "'system.arg.area'" does not exist!')
if system.arg.marked & system.arg.msg>0 then call Quit(12, 'You must not use MARKED/S together with MSG/N')
if system.arg.msg=0 & ~system.arg.marked then call Quit(13, 'Too few arguments!!!')
if system.arg.marked & system.mm.release<423 then call Quit(14, 'Sorry, you need MM >= v1.2.423 to use MARKED/S!')
return
Quit:
parse arg return_code, error_msg
error_line = 0
rc = 0
signal Exit
Replace: procedure
parse arg string,new,old
do while index(string, old) ~= 0
interpret "parse var string l '"old"' r"
string = l || new || r
end
return string
Request_Choice: procedure Expose system.
parse arg text, buttons, ret_vals
title = system.prg.name'-Requester'
text = translate(Replace(text, '0A'x, '\n'), '1b'x, '\')
if length(text)<40 then text = center(text, 40)
MM_Requester title 'text' 'buttons'
if rc=0 then rc=words(ret_vals)
return compress(word(ret_vals, rc), '_')
Resend_Msgs: procedure Expose system.
if system.arg.msg=0 then
if ~Request_Choice('\c\n Resend selected msg(s)? \n', '* _YES | _NO ', '1 0') then
call Quit(5, 'Aborted by user!')
do n=0 to system.msgs.count-1
MM_ReadMsg system.arg.area system.msgs.n 'msg'
if RC>0 then
do
call Warn_Req('Msg #'system.msgs.n 'does not exist!')
iterate
end
tmp = msg.flags
msg.flags = '!DEL !MARK !SENT'
do while tmp~=''
parse var tmp check tmp
if find('DEL IMP MARK SENT', check)=0 then msg.flags = msg.flags check
end
new. = 0
do m=0 to msg.head.count-1
parse value strip(msg.head.n, 'b', '010D'x' ') with check .
if find('CHRS: MSGID: PID: TID:', check)=0 then MM_AddToStem 'new' 'msg.head.'n
end
msg.file = system.tmpfile
MM_WriteStem system.tmpfile 'new'
MM_WriteStem system.tmpfile 'msg.text'
MM_EditMsg system.arg.area system.msgs.n 'msg'
if RC>0 then call Warn_Req('Error' RC 'while trying to edit msg #'system.msgs.n'!')
else call Log('Resended' system.arg.area', msg #'system.msgs.n'.')
end
return
Search_Msgs: procedure Expose system.
if system.arg.msg>0 then MM_AddToStem 'system.msgs' 'system.arg.msg'
else
do
call Log('Searching for marked msgs...')
MM_SearchMsgs system.arg.area 'system.msgs' '#?' '#?' '#?' 'MARK'
end
return system.msgs.count>0
Syntax:
signal off syntax
return_code = 40
error_line = sigl
error_msg = 'Syntax-error' rc 'at line' sigl '['errortext(rc)']'
rc = 0
signal Exit
Usage:
rx. = ''
rx.0.0 = '[rx] '
rx.0.1 = '[.rexx]'
m = pos('/e', system.prg.ver)>0
tmp = rx.m.0 || system.prg.name || rx.m.1
say
say 'Usage:' tmp system.cmdopts
say
call Quit(5, 'Usage requested.')
Warn_Req: procedure Expose system.
parse arg text
if ~system.arg.noreq then call Request_Choice('\c\n'system.warn'\n\n'text'\n', '* _OK ', '_')
call Log(system.warn text)
return